#pragma once

class Vector3D;
class Str;

class Direction3D
{
private:
    double i,k,j;
public:
    Direction3D();
    Direction3D(double i,double j,double k);
    ~Direction3D();
    Direction3D& set(double i,double j,double k);
    Direction3D& setFromLength(double dx,double dy,double dz);
    Direction3D& rotateR(double horizontal, double vertical);
	Direction3D& setRotationR(double horizontal, double vertical);
	Direction3D& getRotationR(double &horizontal, double &vertical);
	Direction3D& rotateD(double horizontal, double vertical);
	Direction3D& setRotationD(double horizontal, double vertical);
	Direction3D& getRotationD(double &horizontal, double &vertical);
	double getRotationHorizontalR();
	double getRotationVerticalR();
	double getRotationHorizontalD();
	double getRotationVerticalD();
    Direction3D& invert();
    Vector3D& toVector(Vector3D &vector);
    double getI();
    double getK();
    double getJ();
	Str& toString(Str &str);
	Direction3D& copy(Direction3D &dir);
	Direction3D& operator=(Direction3D &dir);
	bool eq(Direction3D &dir);
	bool neq(Direction3D &dir);
	bool operator==(Direction3D &dir);
	bool operator!=(Direction3D &dir);
	double xyDir();
	double xzDir();
	double yxDir();
	double yzDir();
	double zxDir();
	double zyDir();
};